# 这个赛题很有意思 要我来做我第一步肯定是做一个关系抽取。因为没有标记数据集，所以我想第一步我的实现方案是依靠句法结构来进行关系抽取
import pandas as pd
import jieba

train = pd.read_csv("../data/test.csv").values.tolist()


# print(train)
# for train in train:
#     train_question_cut = jieba.lcut(train[1])
#     print(train_question_cut)

# 分词结果看出来数字是可以被jieba切分出来的
# 看了看题目 无非就是加减乘除方面的问题 所以第一步是判断问题中数字的数量
# 这里的数字包括文字类型的数字 数字 小数点类型的小数 以及/形式的小数
# 我准备把小数全部归一化成 小数点类型的 这样会简单一些 数据集中总共 1807 个 '/'

# s是一个字符串，比如说s='123',或者s='7.89'
def number_choose(s):
    try:
        return float(s)
    except ValueError:
        return False


value_count = 0
new_question = []
for train in train:
    question = {}
    train_question_cut = jieba.lcut(train[1])
    next_integer = "yes"
    question["question"] = train[1]
    in_number = []
    for i in range(1, len(train_question_cut) - 1):
        if next_integer == "pass":
            next_integer = "yes"
            continue

        last_word = train_question_cut[i - 1]
        local_word = train_question_cut[i]
        next_word = train_question_cut[i + 1]
        number = number_choose(local_word)
        if number:
            in_number.append(number)
            print(number)
        if "%" in local_word:
            number = number_choose(local_word.strip("%")) / 100
            in_number.append(number)

        if local_word == "/" or local_word == "﹕" or local_word == ":":
            try:
                print(last_word, next_word)
                print(int(last_word) / int(next_word))
                in_number = in_number[:-1]
                in_number.append(int(last_word) / int(next_word))

                value_count += 1
                next_integer = "pass"
            except ValueError:
                continue
            except ZeroDivisionError:
                continue
    question["number"] = in_number
    if question not in new_question:
        new_question.append(question)
print("/_value_count", value_count)
# 这一步我找到 1276 个带/的小数 所以下一步就是我们新建一个数据集 数据集里面就不包含带”/“的小数了 这样会带来一些误差
# 导出新的数据集
import json

json.dump(new_question, open("new_test.json", "w", encoding="utf-8"), ensure_ascii=False, indent=3)
